2.1.2 JS抽象语法树

由 JS 解析器把代码转化成 AST

编译器 和 解释器

能够将代码转化成AST的工具叫做“编译器”,
而把能够将AST翻译成目标语言并运行的工具叫做“解释器”。

编译器

  • 词法分析:一个一个字母分析

    • 1.分析形参
    • 2.分析变量声明
    • 3.分析函数声明
  • 语法分析: 把词法分析数组转化成抽象语法树(AST),验证语法

  • 字节码生成器 字节码生成器的作用,是将抽象语法树转为JavaScript引擎可以执行的二进制代码

  • 字节码解释器 字节码解释器的作用是读取并执行字节码。

  • 参考:

什么是抽象语法树

众多的引擎

通过什么工具或库来实现源码转化为抽象语法树?
那就是javascript Parser 解析器,他会把js源码转化为抽象的语法树。
浏览器会把js源码通过解析器转化为抽象语法树,再进一步转化为字节码或直接生成机器码

一般来说每一个js引擎都会有自己的抽象语法树格式,chrome的v8引擎,firefox的SpiderMonkey 引擎等等,
MDN提供了详细SpiderMonkey AST format的详细说明,算是业界的标准。
(SpiderMonkey是Mozilla项目的一部分,是一个用C语言实现的JavaScript脚本引擎,
为了在SpiderMonkey中运行JavaScript代码,应用程序必须有三个要素:JSRuntime,JSContext和全局对象。)

chrome有v8,firefix有spidermonkey.还有一些常用的引擎有:

esprima
acron
Traceur
UglifyJS2
shift
1
2
3
4
5

AST的三板斧

通过esprima生成AST
通过estraverse遍历和更新AST
通过escodegen将AST重新生成源码
1
2
3

参考